文章目录
  1. 1. UIScrollView 原理详解
  2. 2. UIScrollView 原理详解
    1. 2.1. 单独窗口打印放大字号缩小字号
    2. 2.2.

UIScrollView 原理详解

Ios基础语法 UIScrollView

UIScrollView 原理详解

2010-12-2411:05
阅读数:7807

单独窗口打印放大字号缩小字号

##

scroll view 原理 在滚动过程当中,其实是在修改原点坐标。当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那么 scroll view 发送

scroll view 原理

    在滚动过程当中,其实是在修改原点坐标。当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那么 scroll view 发送 tracking events 到被点击的 subview。假如在计时器到点前发生了移动事件,那么 scroll view 取消 tracking 自己发生滚动。

    子类可以重载

[touchesShouldBegin:withEvent:inContentView: 决定自己是否接收 touch 事件

pagingEnabled:当值是 YES 会自动滚动到 subview 的边界,默认是NO

touchesShouldCancelInContentView: 开始发送 tracking messages 消息给 subview 的时候调用这个方法,决定是否发送 tracking messages 消息到subview。假如返回 NO,发送。YES 则不发送。

假如 canCancelContentTouches属性是NO,则不调用这个方法来影响如何处理滚动手势。]( “分享到网易微博”)

[    scroll view 还处理缩放和平移手势,要实现缩放和平移,必须实现委托 viewForZoomingInScrollView:、scrollViewDidEndZooming:withView:atScale:

两个方法。另外 maximumZoomScale和minimumZoomScale 两个属性要不一样。]( “分享到网易微博”)

几个属性介绍

[tracking

当 touch 后还没有拖动的时候值是YES,否则NO]( “分享到网易微博”)

[zoomBouncing

当内容放大到最大或者最小的时候值是 YES,否则 NO]( “分享到网易微博”)

[zooming

当正在缩放的时候值是 YES,否则 NO]( “分享到网易微博”)

[decelerating

当滚动后,手指放开但是还在继续滚动中。这个时候是 YES,其它时候是 NO]( “分享到网易微博”)

[decelerationRate

设置手指放开后的减速率]( “分享到网易微博”)

[maximumZoomScale

一个浮点数,表示能放最大的倍数]( “分享到网易微博”)

[minimumZoomScale 

一个浮点数,表示能缩最小的倍数]( “分享到网易微博”)

[pagingEnabled

当值是 YES 会自动滚动到 subview 的边界。默认是NO]( “分享到网易微博”)

[scrollEnabled

决定是否可以滚动]( “分享到网易微博”)

[delaysContentTouches

是个布尔值,当值是 YES 的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉 touch-down 事件,否则就不捕捉。假如值是NO,当用户触碰, scroll view 会立即触发 touchesShouldBegin:withEvent:inContentView:,默认是 YES]( “分享到网易微博”)

[canCancelContentTouches

当值是 YES 的时候,用户触碰后,然后在一定时间内没有移动,scrollView 发送 tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView 发送了 touchesCancelled:withEvent: 到 subview,然后 scroView 开始滚动。假如值是 NO,scrollView 发送 tracking events 后,就算用户移动手指,scrollView 也不会滚动。]( “分享到网易微博”)

[contentSize

里面内容的大小,也就是可以滚动的大小,默认是0,没有滚动效果。]( “分享到网易微博”)

[showsHorizontalScrollIndicator

滚动时是否显示水平滚动条]( “分享到网易微博”)

[showsVerticalScrollIndicator

滚动时是否显示垂直滚动条]( “分享到网易微博”)

[bounces

默认是 yes,就是滚动超过边界会反弹有反弹回来的效果。假如是 NO,那么滚动到达边界会立刻停止。]( “分享到网易微博”)

[bouncesZoom

和 bounces 类似,区别在于:这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果;假如是 NO,则到达最大或者最小的时候立即停止。]( “分享到网易微博”)

[directionalLockEnabled

默认是 NO,可以在垂直和水平方向同时运动。当值是 YES 时,假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动。 假如一开始是对角方向滚动,则不会禁止某个方向]( “分享到网易微博”)

[indicatorStyle

滚动条的样式,基本只是设置颜色。总共3个颜色:默认、黑、白]( “分享到网易微博”)

[scrollIndicatorInsets

设置滚动条的位置]( “分享到网易微博”)

判断滚动时是否到view底部

-(void)scrollViewDidScroll:(UIScrollView*)aScrollView {
    CGPoint offset = aScrollView.contentOffset;
    CGRect bounds = aScrollView.bounds;
    CGSize size = aScrollView.contentSize;
    UIEdgeInsets inset = aScrollView.contentInset;
    float y = offset.y + bounds.size.height - inset.bottom;
    float h = size.height;
    // NSLog(@"offset: %f", offset.y);   
    // NSLog(@"content.height: %f", size.height);   
    // NSLog(@"bounds.height: %f", bounds.size.height);   
    // NSLog(@"inset.top: %f", inset.top);   
    // NSLog(@"inset.bottom: %f", inset.bottom);   
    // NSLog(@"pos: %f of %f", y, h);

    float reload_distance =10;
    if(y ]]
>
 h + reload_distance){
        NSLog(@"load more rows"); 

    }}

文章目录
  1. 1. UIScrollView 原理详解
  2. 2. UIScrollView 原理详解
    1. 2.1. 单独窗口打印放大字号缩小字号
    2. 2.2.